package com.yike.user.utils;

import com.alipay.v3.ApiException;
import com.alipay.v3.ApiClient;
import com.alipay.v3.util.model.AlipayConfig;
import com.alipay.v3.Configuration;
import com.alipay.v3.api.AlipayFundTransUniApi;
import com.alipay.v3.model.*;

import java.io.File;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

public class AlipayFundTransUniApiTransfer {

    public static void main(String[] args) throws ApiException {
        ApiClient defaultClient = Configuration.getDefaultApiClient();
        // 初始化alipay参数（全局设置一次）
        defaultClient.setAlipayConfig(getAlipayConfig());

        // 构造请求参数以调用接口
        AlipayFundTransUniApi api = new AlipayFundTransUniApi();
        AlipayFundTransUniTransferModel data = new AlipayFundTransUniTransferModel();

        // 设置商家侧唯一订单号
        data.setOutBizNo("201806300001");

        // 设置订单总金额
        data.setTransAmount("23.00");

        // 设置描述特定的业务场景
        data.setBizScene("DIRECT_TRANSFER");

        // 设置业务产品码
        data.setProductCode("TRANS_ACCOUNT_NO_PWD");

        // 设置转账业务的标题
        data.setOrderTitle("201905代发");

        // 设置原支付宝业务单号
        data.setOriginalOrderId("20190620110075000006640000063056");

        // 设置收款方信息
        Participant payeeInfo = new Participant();
        payeeInfo.setCertType("IDENTITY_CARD");
        payeeInfo.setCertNo("1201152******72917");
        payeeInfo.setIdentity("2088123412341234");
        payeeInfo.setName("黄龙国际有限公司");
        payeeInfo.setIdentityType("ALIPAY_USER_ID");
        data.setPayeeInfo(payeeInfo);

        // 设置业务备注
        data.setRemark("201905代发");

        // 设置转账业务请求的扩展参数
        data.setBusinessParams("{\"payer_show_name_use_alias\":\"true\"}");

        // 设置签名信息
        SignData signData = new SignData();
        signData.setOriSign("EqHFP0z4a9iaQ1ep==");
        signData.setPartnerId("签名被授权方支付宝账号ID");
        signData.setOriAppId("2021000185629012");
        signData.setOriOutBizNo("商户订单号");
        signData.setOriSignType("RSA2");
        signData.setOriCharSet("UTF-8");
        data.setSignData(signData);


        try {
            AlipayFundTransUniTransferResponseModel response = api.transfer(data);
        } catch (ApiException e) {
            AlipayFundTransUniTransferDefaultResponse errorObject = (AlipayFundTransUniTransferDefaultResponse) e.getErrorObject();
            System.out.println("调用失败:" + errorObject);
        }
    }

    private static AlipayConfig getAlipayConfig() {
        AlipayConfig alipayConfig = new AlipayConfig();
        alipayConfig.setServerUrl("https://openapi.alipay.com");
        alipayConfig.setAppId("2021004169687758");
        alipayConfig.setPrivateKey("<-- 请填写您的应用私钥，例如：MIIEvQIBADANB ... ... -->");
        alipayConfig.setAppCertPath("<-- 请填写您的应用公钥证书文件路径，例如：/foo/appCertPublicKey_2019051064521003.crt -->");
        alipayConfig.setAlipayPublicCertPath("<-- 请填写您的支付宝公钥证书文件路径，例如：/foo/alipayCertPublicKey_RSA2.crt -->");
        alipayConfig.setRootCertPath("<-- 请填写您的支付宝根证书文件路径，例如：/foo/alipayRootCert.crt -->");
        return alipayConfig;
    }
}

